Принципы работы SQL-движка
Разработчику
Аналитику
Тестировщику
Архитектору
Инженеру
Как работает SQL?
Порядок работы с данными
Порядок работы с данными:
- выполняется подключение к БД (логин/пароль, адрес сервера);
- отправляется запрос (например, выбрать все записи из таблицы №1);
- выполняется обработка запроса в СУБД;
- СУБД парсит (разбирает запрос);
- СУБД строит план выполнения запроса (как найти данные быстрее);
- СУБД читает или записывает данные;
- СУБД возвращает результат (таблица, число, статус).
Чтение SQL-запроса процессором:
- сначала запрос разбирается на части;
- определяется, что нужно сделать (SELECT);
- определяется какие столбцы нужно обработать (* - все поля);
- определяется, откуда – из какой таблицы это взять (FROM);
- каким условиям должны соответствовать данные (WHERE);
- как вывести результат (группировка, сортировка, вычисления);
- проверяются права доступа к таблице для выполнившего запрос;
- выполняется оптимизация запроса;
- запрос исполняется и возвращается результат.
Интересный факт: В SQL порядок слов не соответствует порядку выполнения. И если запрос будет выглядеть так:
SELECT name, COUNT(*)
FROM users
WHERE age > 18
GROUP BY name
HAVING COUNT(*) > 5
ORDER BY name;
на самом деле порядок будет такой:
FROM users
WHERE age > 18
GROUP BY name
HAVING COUNT(*) > 5
SELECT name, COUNT(*)
ORDER BY name;
Порядок чтения здесь не построчный.
| № | Команда | Смысл |
|---|---|---|
| 1 | FROM и JOIN | Определение - откуда брать данные. Обрабатываются таблицы, указанные в FROM, а также все JOIN (включая INNER, LEFT, RIGHT и т.д.). В результате создаётся временная таблица, виртуальный набор строк из объединенных таблиц. |
| 2 | WHERE | Фильтрация строк до группировки. Применяются условия к отдельным строкам, удаляются строки, не удовлетворяющие условиям. На этом этапе агрегировать (SUM, COUNT) не получится. |
| 3 | GROUP BY | Группировка строк по значениям - строки объединяются в группы по указанным столбцам, и каждая уникальная комбинация значений становится одной строкой в результирующем наборе на этом этапе. Именно после группировки можно использовать агрегатные функции (COUNT, SUM, AVG). |
| 4 | HAVING | Фильтрация групп после группировки, аналог WHERE, который применяется к группам, а не отдельным строкам. Можно использовать агрегатные функции - в итоге удаляются группы, не удовлетворяющие условиям. К примеру, можно оставить те группы, где больше 5 сотрудников. |
| 5 | SELECT | Выбор и вычисление столбцов - на этом этапе определяется, какие столбцы попадут в результат, выполняются вычисления - арифметические выражения, вызовы функций, псевдонимы. Именно здесь можно ссылаться на псевдонимы, но в других частях запроса использовать псевдонимы нельзя, потому что SELECT выполняется позже. |
| 6 | DISTINCT | Удаление дубликатов. Если указано SELECT DISTINCT, то дублирующиеся строки удаляются. Проверка дубликатов идёт по финальным выбранным столбцам, потому что после SELECT. |
| 7 | UNION / INTERSECT / EXCEPT | Операции над множествами. Объединяют результаты нескольких SELECT-запросов, выполняются после формирования каждого отдельного набора. UNION объединяет, INTERSECT пересекает, EXCEPT - разность. |
| 8 | ORDER BY | Сортировка результата. Сортирует финальный набор строк по указанным столбцам или выражениям. Можно использовать псевдонимы, так как SELECT уже выполнен, и сортировка никак не влияет на логику группировки или фильтрации. |
| 9 | LIMIT и OFFSET | Ограничение количества строк. Выполняется в самом конце. |
Подробности об SQL можно получить на W3 - https://www.w3schools.com/sql/
См. также
Другие статьи этого же раздела в боковом меню (как на странице «О разделе»). Вот SQL как раз обеспечивает такую связь и это главное отличие реляционных БД - реляции (relations), что означает связи. Знакомимся с языком - ставим программы, запускаем, выполняем первые запросы. Как читать сложные SQL запросы? Анализ вложенных конструкций. DDL - Данные Definition Language (язык определения данных), используется для создания, изменения, удаления объектов структуры данных (таблиц, индексов, схем и т.д.). Два важных вопроса, которые мучают начинающих программистов — Когда использовать кавычки двойные (), одинарные (), а когда апострофы (’)?, Когда использовать точки (.), запятые (,) и точку с запятой… Типы данных определяют, какая информация может храниться в столбце таблицы — числа, текст, даты и т.д. Каждая СУБД поддерживает свои типы, но есть общая классификация. Примеры привилегий — SELECT — чтение данных, INSERT — добавление записей, UPDATE — изменение записей, DELETE — удаление записей ★ DDL (Данные Definition Language) – подмножество SQL, отвечающее за определение и изменение структуры базы данных. DDL-операции работают с метаданными — создают, изменяют и удаляют таблицы, индексы,… Ограничения (constraints) в SQL — это декларативные правила, встроенные в определение таблиц, которые обеспечивают корректность, согласованность и надёжность данных на уровне СУБД. Они действуют… ★ DML (Данные Manipulation Language) в отличие от DDL, выполняет работу не со структурой БД, а непосредственно с данными. В DML SQL оперирует четырьмя главными действиями, известными как CRUD — ★… ★ Алиасы (AS) используются для временного переименования таблиц или столбцов в запросе SQL. Они делают запросы более читаемыми и позволяют избежать конфликтов имён. Общее табличное выражение представляет собой именованное временное результирующее множество, существующее в рамках одного SQL-запроса. Общие табличные выражения позволяют разбить сложный запрос на…SQL - язык структурированных запросов
Первые шаги с SQL
Чтение и анализ сложных SQL-запросов
Категории SQL-команд - DDL, DML, DCL, TCL
Синтаксис и пунктуация в SQL
Типы данных в SQL
Взаимодействие приложений с СУБД через SQL
DDL - определение структуры базы данных
Ограничения целостности в SQL
CRUD-операции и язык манипуляции данными (DML)
Алиасы, JOIN и объединение таблиц
Общие табличные выражения (CTE)